package model;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 *
 * @author Alvin & Roy
 */
public class Vijand extends SpelObject {
    /** De speler */
    private Speler speler;
    /** De Path Finder */
    private PathFinder pathFinder;
    /** Het laatst berekende pad */
    private Path laatstePad;
    /** Mag de vijand bewegen */
    private boolean magBewegen;
    /** Staat de vijand vast */
    private boolean vast;

    /**
     * De constructor
     * @param v Het veld waarop de vijand staat
     * @param s De speler
     * @param p De PathFinder
     */
    public Vijand(Veld v, Speler s, PathFinder p){
        //roep de constructor van SpelObject aan
        super(v);
        speler = s;
        //haal het plaatje van de vijand op
        try {
            setImg(ImageIO.read(new File(getIPATH()+"bear.gif")));
        } catch (IOException e) {
                System.out.println("Fout bij het laden van de recources: " + e);
                System.exit(0);
        }
        pathFinder = p;
        
        //vijand mag standaard bewegen
        magBewegen = true;

    }

    /**
     * paint roept de teken functie van GameMap aan
     */
    public void paint(){
        GameMap.teken();
    }

    /**
     * Beweeg de vijand
     */
    public void move(){
        //haal het huidige veld op
        Veld curVeld = this.getVeld();
        //haal het beste pad naar de speler op
        Path path = pathFinder.findPath(getVeld().getXPos(), getVeld().getYPos(),
                speler.getPositie().getxPos(), speler.getPositie().getyPos());
        //Controleer of er een pad is
        if(path != null){
            //Maak een richting variabele aan
            Richting r;
            //Haal de eerste stap op
            Step nextStep = path.getStep(1);

            //Haal de nieuwe x op
            int nx = nextStep.getX();
            //Haal de nieuwe y op
            int ny = nextStep.getY();
            //Haal de oude x op
            int hx = curVeld.getXPos();
            //Haal de oude y op
            int hy = curVeld.getYPos();

            r = Richting.determineRichting(hx, hy, nx, ny);

            //het volgende veld
            Veld volgendVeld;

            //controleer of de richting niet null is
            if(r != null){
                //Haal het volgend eveld op
                volgendVeld = this.getVeld().getBuur(r);
            }else{
                //anders is het volgende veld het huidige veld
                volgendVeld = this.getVeld();
            }
            //Verwijder de vijand van het huidige veld
            this.getVeld().setSpelObject(null);
            //Plaats de vijand op het nieuwe veld
            volgendVeld.setSpelObject(this);
            //Stel het nieuwe veld in bij de vijand
            this.setVeld(volgendVeld);
            this.paint();
        }

        //sla het pad op
        this.laatstePad = path;
    }

    /**
     * Haal het laatste pad op
     * @return Het laaste pad
     */
    public Path getLaatstePad(){
        return laatstePad;
    }

    /**
     * Stel mag bewegen in
     * Magbewegen wordt het tegenovergestelde van de huidige waarde
     */
    public void toggleMagBewegen(){
        magBewegen = !magBewegen;
    }

    /**
     * Kijk of de vijand mag bewegen
     * @return True als de vijand mag bewegen
     */
    public boolean magBewegen(){
        return magBewegen;
    }

    /**
     * Kijk of de vijand vast staat
     * @return True als de vijand vast staat
     */
    public boolean staatVast(){
        return vast;
    }

    /**
     * Zet de vijand vast
     */
    public void zetVast(){
        vast = true;
    }

    /**
     * Zet de vijand niet-vast
     */
    public void maakVrij(){
        vast = false;
    }
  
}
